热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

极值|容忍度_基于AI算法的数据库异常监测系统的设计与实现

篇首语:本文由编程笔记#小编为大家整理,主要介绍了基于AI算法的数据库异常监测系统的设计与实现相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了基于AI算法的数据库异常监测系统的设计与实现相关的知识,希望对你有一定的参考价值。




美团数据库平台研发组,面临日益急迫的数据库异常发现需求,为了更加快速、智能地发现、定位和止损,我们开发了基于AI算法的数据库异常检测服务。本文从特征分析、算法选型、模型训练与实时检测等维度介绍了我们的一些实践和思考,希望为从事相关工作的同学带来一些启发或者帮助。



1. 背景

数据库被广泛用于美团的核心业务场景上,对稳定性要求较高,对异常容忍度非常低。因此,快速的数据库异常发现、定位和止损就变得越来越重要。针对异常监测的问题,传统的固定阈值告警方式,需要依赖专家经验进行规则配置,不能根据不同业务场景灵活动态调整阈值,容易让小问题演变成大故障。

而基于AI的数据库异常发现能力,可以基于数据库历史表现情况,对关键指标进行7 * 24小时巡检,能够在异常萌芽状态就发现风险,更早地将异常暴露,辅助研发人员在问题恶化前进行定位和止损。基于以上这些因素的考量,美团数据库平台研发组决定开发一套数据库异常检测服务系统。接下来,本文将会从特征分析、算法选型、模型训练与实时检测等几个维度阐述我们的一些思考和实践。


2. 特征分析


2.1 找出数据的变化规律

在具体进行开发编码前,有一项非常重要的工作,就是从已有的历史监控指标中,发现时序数据的变化规律,从而根据数据分布的特点选取合适的算法。以下是我们从历史数据中选取的一些具有代表性的指标分布图:

从上图我们可以看出,数据的规律主要呈现三种状态:周期、漂移和平稳[1]。因此,我们前期可以针对这些普遍特征的样本进行建模,即可覆盖大部分场景。接下来,我们分别从周期性、漂移性和平稳性这三个角度进行分析,并讨论算法设计的过程。


2.1.1 周期性变化


  1. 提取趋势成分,分离出残差序列。使用移动平均法提取出长期趋势项,跟原序列作差得到残差序列(此处周期性分析与趋势无关,若不分离趋势成分,自相关将显著受到影响,难以识别周期)。
  2. 计算残差的循环自相关(Rolling Correlation)序列。通过循环移动残差序列后,与残差序列进行向量点乘运算来计算自相关序列(循环自相关可以避免延迟衰减)。
  3. 根据自相关序列的峰值坐标来确定周期T。提取自相关序列的一系列局部最高峰,取横坐标的间隔为周期(如果该周期点对应的自相关值小于给定阈值,则认为无显著周期性)。

具体过程如下:


2.1.2 漂移性变化

对于待建模的序列,通常要求它不存在明显的长期趋势或是存在全局漂移的现象,否则生成的模型通常无法很好地适应指标的最新走势[2]。我们将时间序列随着时间的变化出现均值的显著变化或是存在全局突变点的情况,统称为漂移的场景。为了能够准确地捕捉时间序列的最新走势,我们需要在建模前期判断历史数据中是否存在漂移的现象。全局漂移和周期性序列均值漂移,如下示例所示:

数据库指标受业务活动等复杂因素影响,很多数据会有非周期性的变化,而建模需要容忍这些变化。因此,区别于经典的变点检测问题,在异常检测场景下,我们只需要检测出历史上很平稳,之后出现数据漂移的情况。综合算法性能和实际表现,我们使用了基于中位数滤波的漂移检测方法,主要的流程包含以下几个环节:


  1. 中位数平滑

    a.根据给定窗口的大小,提取窗口内的中位数来获取时序的趋势成分。

    b.窗口需要足够大,以避免周期因素影响,并进行滤波延迟矫正。

    c.使用中位数而非均值平滑的原因在于为了规避异常样本的影响。

  2. 判断平滑序列是否递增或是递减

    a.中位数平滑后的序列数据,若每个点都大于(小于)前一个点,则序列为递增(递减)序列。

    b.如果序列存在严格递增或是严格递减的性质,则指标明显存在长期趋势,此时可提前终止。

  3. 遍历平滑序列,利用如下两个规则来判断是否存在漂移的现象

    a.当前样本点左边序列的最大值小于当前样本点右边序列的最小值,则存在突增漂移(上涨趋势)。

    b.当前样本点左边序列的最小值大于当前样本点右边序列的最大值,则存在突降漂移(下跌趋势)。


2.1.3 平稳性变化

对于一个时序指标,如果其在任意时刻,它的性质不随观测时间的变化而变化,我们认为这条时序是具备平稳性的。因此,对于具有长期趋势成分亦或是周期性成分的时间序列而言,它们都是不平稳的。具体示例如下图所示:

针对这种情况,我们可以通过单位根检验(Augmented Dickey-Fuller Test)[3]来判断给定的时间序列是否平稳。具体地说,对于一条给定时间范围指标的历史数据而言,我们认为在同时满足如下条件的情况下,时序是平稳的:


  1. 最近1天的时序数据通过adfuller检验获得的p值小于0.05。
  2. 最近7天的时序数据通过adfuller检验获得的p值小于0.05。

3. 算法选型


3.1 分布规律与算法选择

通过了解业界的一些知名公司在时序数据异常检测上公布的产品介绍,加上我们历史积累的经验,以及对部分线上实际指标的抽样分析,它们的概率密度函数符合如下情况的分布:

针对上述的分布,我们调研了一些常见的算法,并确定了箱形图、绝对中位差和极值理论作为最终异常检测算法。以下是对常见时序数据检测的算法对比表:


算法\\场景对称分布下适用性偏态分布下适用性正态性要求异常容忍度
3Sigma
绝对中位差(MAD)
箱形图(Boxplot)
极值理论(EVT)

我们没有选择3Sigma的主要原因是它对异常容忍度较低,而绝对中位差从理论上而言具有更好的异常容忍度,所以在数据呈现高对称分布时,通过绝对中位差(MAD)替代3Sigma进行检测。我们对不同数据的分布分别采用了不同的检测算法(关于不同算法的原理可以参考文末附录的部分,这里不做过多的阐述):


  1. 低偏态高对称分布:绝对中位差(MAD)
  2. 中等偏态分布:箱形图(Boxplot)
  3. 高偏态分布:极值理论(EVT)

有了如上的分析,我们可以得出具体的根据样本输出模型的流程:

算法的整体建模流程如上图所示,主要涵盖以下几个分支环节:时序漂移检测、时序平稳性分析、时序周期性分析和偏度计算。下面分别进行介绍:

举例来说,假设给定时序自2022/03/01 00:00:00至2022/03/08 00:00:00止,给定窗口大小为5,周期跨度为一天,那么对于时间索引30而言,对其建模所需要的样本点将来自于如下时间段:

[03/01 00:25:00, 03/01 00:35:00]
[03/02 00:25:00, 03/02 00:35:00]

[03/07 00:25:00, 03/07 00:35:00]


  1. 偏度计算。时序指标转化为概率分布图,计算分布的偏度,若偏度的绝对值超过阈值,则通过极值理论进行建模输出阈值。若偏度的绝对值小于阈值,则通过箱形图或是绝对中位差的方式进行建模输出阈值。

3.2 案例样本建模

这里选取了一个案例,展示数据分析及建模过程,便于更清晰的理解上述过程。其中图(a)为原始序列,图(b)为按照天的跨度进行折叠的序列,图©为图(b)中某时间索引区间内的样本经过放大后的趋势表现,图(d)中黑色曲线为图©中时间索引所对应的下阈值。如下是针对某时序的历史样本进行建模的案例:

上图©区域内的样本分布直方图以及阈值(已剔除其中部分异常样本),可以看到,在该高偏分布的场景中,EVT算法计算的阈值更为合理。


4. 模型训练与实时检测


4.1 数据流转过程

为了实时检测规模庞大的秒级数据,我们以基于Flink进行实时流处理为出发点,设计了如下的技术方案:


  1. 实时检测部分:基于Flink实时流处理,消费Mafka(美团内部的消息队列组件)消息进行在线检测,结果存储于Elasticsearch(以下简称ES)中,并产生异常记录。
  2. 离线训练部分:以Squirrel(美团内部的KV数据库)作为任务队列,从MOD(美团内部运维数据仓库)读取训练数据,从配置表读取参数,训练模型,保存于ES,支持自动和手动触发训练,通过定时读取模型库的方式,进行模型加载和更新。

以下是具体的离线训练和在线检测技术设计:


4.2 异常检测过程

异常检测算法整体采用分治思想,在模型训练阶段,根据历史数据识别提取特征,选定合适的检测算法。这里分为离线训练和在线检测两部分,离线主要根据历史情况进行数据预处理、时序分类和时序建模。在线主要加载运用离线训练的模型进行在线实时异常检测。具体设计如下图所示:


5. 产品运营

为了提高优化迭代算法的效率,持续运营以提高精准率和召回率,我们借助Horae(Horae是美团内部可扩展的时序数据异常检测系统)的案例回溯能力,实现在线检测、案例保存、分析优化、结果评估、发布上线的闭环。

目前,异常检测算法指标如下:


  • 精准率:随机选择一部分检测出异常的案例,人工校验其中确实是异常的比例,为81%。
  • 召回率:根据故障、告警等来源,审查对应实例各指标异常情况,对照监测结果计算召回率,为82%。
  • F1-score:精准率和召回率的调和平均数,为81%。

6. 未来展望

目前,美团数据库异常监测能力已基本构建完成,后续我们将对产品继续进行优化和拓展,具体方向包括:


  1. 具有异常类型识别能力。可以检测出异常的类型,如均值变化、波动变化、尖刺等,支持按异常类型进行告警订阅,并作为特征输入后续诊断系统,完善数据库自治生态[4]
  2. 构建Human-in-Loop环境。支持根据反馈标注自动学习,保障模型持续优化[5]
  3. 多种数据库场景的支持。异常检测能力平台化以支持更多数据库场景,如DB端到端报错、节点网络监测等。

7. 附录


7.1 绝对中位差

绝对中位差,即Median Absolute Deviation(MAD),是对单变量数值型数据的样本偏差的一种鲁棒性测量[6],通常由下式计算而得:

其中在先验为正态分布的情况下,一般C选择1.4826,k选择3。MAD假定样本中间的50%区域均为正常样本,而异常样本落在两侧的50%区域内。当样本服从正态分布的情况下,MAD指标相较于标准差更能适应数据集中的异常值。对于标准差,使用的是数据到均值的距离平方,较大的偏差权重较大,异常值对结果影响不能忽视,而对MAD而言少量的异常值不会影响实验的结果,MAD算法对于数据的正态性有较高要求。


7.2 箱形图

箱形图主要通过几个统计量来描述样本分布的离散程度以及对称性,包括:


  • Q0:最小值(Minimum)
  • Q1:下四分位数(Lower Quartile)
  • Q2:中位数(Median)
  • Q3:上四分位数(Upper Quartile)
  • Q4:最大值(Maximum)

将Q1与Q3之间的间距称为IQR,当样本偏离上四分位1.5倍的IQR(或是偏离下四分位数1.5倍的IQR)的情况下,将样本视为是一个离群点。不同于基于正态假设的三倍标准差,通常情况下,箱形图对于样本的潜在数据分布没有任何假定,能够描述出样本的离散情况,且对样本中包含的潜在异常样本有较高的容忍度。对于有偏数据,Boxplot进行校准后建模更加符合数据分布[7]


7.3 极值理论

真实世界的数据很难用一种已知的分布来概括,例如对于某些极端事件(异常),概率模型(例如高斯分布)往往会给出其概率为0。极值理论[8]是在不基于原始数据的任何分布假设下,通过推断我们可能会观察到的极端事件的分布,这就是极值分布(EVD)。其数学表达式如下(互补累积分布函数公式):

其中t代表样本的经验阈值,对于不同场景可以设置不同取值,




γ



\\gamma


γ
,




δ



\\delta


δ
分别是广义帕累托分布中的形状参数与尺度参数,在给定样本超过人为设定的经验阈值t的情况下,随机变量X-t是服从广义帕累托分布的。通过极大似然估计方法我们可以计算获得参数估计值





γ


^




\\hat\\gamma


γ^






δ


^




\\hat\\delta


δ^
,并且通过如下公式来求取模型阈值:

上述公式中q代表风险参数,n是所有样本数量,Nt是满足x-t>0的样本数量。由于通常情况下对于经验阈值t的估计没有先验的信息,因此可以使用样本经验分位数来替代数值t,这里经验分位数的取值可以根据实际情况来选择。


8. 参考资料


  • [1] Ren, H., Xu, B., Wang, Y., Yi, C., Huang, C., Kou, X., … & Zhang, Q. (2019, July). Time-series anomaly detection service at microsoft. In Proceedings of the 25th ACM SIGKDD international conference on knowledge discovery & data mining (pp. 3009-3017).
  • [2] Lu, J., Liu, A., Dong, F., Gu, F., Gama, J., & Zhang, G. (2018). Learning under concept drift: A review. IEEE Transactions on Knowledge and Data Engineering, 31(12), 2346-2363.
  • [3] Mushtaq, R. (2011). Augmented dickey fuller test.
  • [4] Ma, M., Yin, Z., Zhang, S., Wang, S., Zheng, C., Jiang, X., … & Pei, D. (2020). Diagnosing root causes of intermittent slow queries in cloud databases. Proceedings of the VLDB Endowment, 13(8), 1176-1189.
  • [5] Holzinger, A. (2016). Interactive machine learning for health informatics: when do we need the human-in-the-loop?. Brain Informatics, 3(2), 119-131.
  • [6] Leys, C., Ley, C., Klein, O., Bernard, P., & Licata, L. (2013). Detecting outliers: Do not use standard deviation around the mean, use absolute deviation around the median. Journal of experimental social psychology, 49(4), 764-766.
  • [7] Hubert, M., & Vandervieren, E. (2008). An adjusted boxplot for skewed distributions. Computational statistics & data analysis, 52(12), 5186-5201.
  • [8] Siffer, A., Fouque, P. A., Termier, A., & Largouet, C. (2017, August). Anomaly detection in streams with extreme value theory. In Proceedings of the 23rd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (pp. 1067-1075).

关于团队

美团基础技术部/数据库研发中心/数据库平台研发组,负责为美团各个业务线提供高效便捷的数据库使用入口,帮助美团DBA稳定快捷地维护数据库,同时提供分析诊断平台,实现数据库自治。

阅读美团技术团队更多技术文章合集

前端 | 算法 | 后端 | 数据 | 安全 | 运维 | iOS | Android | 测试

| 在公众号菜单栏对话框回复【2021年货】、【2020年货】、【2019年货】、【2018年货】、【2017年货】等关键词,可查看美团技术团队历年技术文章合集。

| 本文系美团技术团队出品,著作权归属美团。欢迎出于分享和交流等非商业目的转载或使用本文内容,敬请注明“内容转载自美团技术团队”。本文未经许可,不得进行商业性转载或者使用。任何商用行为,请发送邮件至tech@meituan.com申请授权。


推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • “你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬” ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
author-avatar
aatwo19668035
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有